/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package our.gui;

import java.awt.KeyboardFocusManager;

/**
 *
 * @author keysman
 */
public class ourTextArea extends javax.swing.JTextArea implements ourInterfaceCommonObj {
    // Definisco la classe che possiede le funzioni comuni a tutti gli oggetti a video
    public our.gui.commonObjectClass SETTINGS = new our.gui.commonObjectClass();

    private int _MaxLen = 255; // Lunghezza massima di default

    public int getMaxLen() {
        return _MaxLen;
    }

    public void setMaxLen(int _MaxLen) {
        this._MaxLen = _MaxLen;
    }

    private boolean _FirstFieldOutOfKeyFrame = false; // Se è il primo elemento fuori dal keyframe

    private java.lang.String _FieldOnDB = "";    // Il nome del campo del db
    private java.lang.String _HelpMsg = "";      // Il messaggio che verrà visualizzato sulla StatusBar

    public String getFieldOnDB() {
        return _FieldOnDB;
    }

    public void setFieldOnDB(String _FieldOnDB) {
        this._FieldOnDB = _FieldOnDB;
    }

    public String getHelpMsg() {
        return _HelpMsg;
    }

    public void setHelpMsg(String _HelpMsg) {
        this._HelpMsg = _HelpMsg;
    }

    public boolean isFirstFieldOutOfKeyFrame() {
        return _FirstFieldOutOfKeyFrame;
    }

    public void setFirstFieldOutOfKeyFrame(boolean _FirstFieldOutOfKeyFrame) {
        this._FirstFieldOutOfKeyFrame = _FirstFieldOutOfKeyFrame;
    }

    public ourTextArea()
    {
        super();
        // Diabilito l'oggetto per default
        setEnabled(false);
        // Imposto il font
        setFont(SETTINGS.getEntryFieldFont());
        // Imposto l'altezza dell'oggetto (non funge)
        setSize(getWidth(), SETTINGS.getOurHeight());
        // Aggiungo i listener per il fuoco
        addFocusListener(new java.awt.event.FocusAdapter() {
            @Override
            public void focusGained(java.awt.event.FocusEvent evt) {
                thisFocusGained(evt);
            }
            @Override
            public void focusLost(java.awt.event.FocusEvent evt) {
                thisFocusLost(evt);
            }
        });

        // Aggiungo i listeneres per la tastiera
        addKeyListener(new java.awt.event.KeyAdapter() {
            @Override
            public void keyTyped(java.awt.event.KeyEvent evt) {
                KeyTyped(evt);
            }
        });

        addKeyListener(new java.awt.event.KeyAdapter() {
            @Override
            public void keyPressed(java.awt.event.KeyEvent evt) {
                if(evt.getKeyChar()==java.awt.event.KeyEvent.VK_TAB)
                {
                    evt.consume();
                    if(evt.isShiftDown())
                        KeyboardFocusManager.getCurrentKeyboardFocusManager().focusPreviousComponent();
                    else
                        KeyboardFocusManager.getCurrentKeyboardFocusManager().focusNextComponent();
                }
            }
        });
    }

    private void KeyTyped(java.awt.event.KeyEvent evt) {
        if(this.getText().length()>=_MaxLen) evt.consume();
    }

    private void thisFocusGained(java.awt.event.FocusEvent evt) {
        selectAll();
        // Uso il costrutto try-catch perchè se sono in una form non standard(formDBConnection)
        // e non ho la statusbar viene lanciata una eccezione
        try {
            if( (this.getHelpMsg()==null) || (this.getHelpMsg().length()==0) )
                our.gui.ourForm.updateStatusHelp("");
            else
                our.gui.ourForm.updateStatusHelp(SETTINGS.getHelpMsg());
        } catch (NullPointerException npe) { }
    }

    public void thisFocusLost(java.awt.event.FocusEvent evt) {
        select(0,0);
    }

    public boolean ISVALID(boolean bShowErrorMessage) {
        return true;
    }

    /**
     * Questa funzione disabilita la gestione del mouse del campo ourTextField e in caso di MOUSE_CLICKED richiama
     * la funzione di gestione del parent: ourTextField
     * @param e
     */
    @Override
    protected void processMouseEvent(java.awt.event.MouseEvent e)
    {
        boolean bConsumeEvent = true;
        if(SETTINGS.getOurForm()!=null)
        {
            if(e.paramString().indexOf("MOUSE_CLICKED")>=0)
            {
                if(hasFocus() || isEnabled()==false)
                {
                    e.consume();
                } else {
                    bConsumeEvent = !(SETTINGS.getOurForm().clickOnComponent(this));
                }
            }
            if(bConsumeEvent)
            {
                e.consume();
            } else {
                requestFocus();
                super.processMouseEvent(e);
            }
        } else if(e.paramString().indexOf("MOUSE_CLICKED")>=0) {
            requestFocus();
            super.processMouseEvent(e);
        }
    }

}
